天涼好個秋.

x^=0x8000

636 阅 0 评 IT手札

算法

把signed(word)变量转换为unsigned(word)的算法,分析整理。

分析

方便分析 x^=0x8000 -> DEST = SRC^0x8000
关键数据点:
  • SRC = 0x0000 -> DEST = 0x000^0x8000 -> DEST=0x8000
  • SRC = 0x7FFF -> DEST = 0x7FFF^0x8000 -> DEST=0xFFFF
  • SRC = 0x8000 -> DEST = 0x8000^0x8000 -> DEST=0x0000
  • SRC = 0xFFFF -> DEST = 0xFFFF^0x8000 -> DEST=0x7FFF
  1. 如果将SRC作为unsigned考虑,并且作为X轴,蓝色线段以SRC表示的值(signed)为Y轴,红色线段以DEST值表示的值(unsigned)为Y轴。

  1. 如果将SRC作为signed考虑,并且作为X轴,蓝色线段以SRC表示的值(signed)为Y轴,红色线段以DEST值表示的值(unsigned)为Y轴。

总结

SRC、DEST线段在Y轴上的投影可以想象成在数轴上,DEST的投影相对于SRC向正方向移动了0x8000,但投影的长度不变。
在没分析之前的认为DEST=SRC+0x8000就能解决问题。真是愚不可及。

EOF